package com.tanhua.dubbo.api;

import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.tanhua.dubbo.api.db.UserInfoApi;
import com.tanhua.dubbo.api.mapper.UserInfoMapper;
import com.tanhua.model.db.UserInfo;
import org.apache.commons.lang.StringUtils;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@DubboService
public class UserInfoApiImpl implements UserInfoApi {

    @Autowired
    private UserInfoMapper userInfoMapper;

    /**
     * 添加用户信息
     *
     * @param userInfo
     */
    @Override
    public void add(UserInfo userInfo) {
        userInfoMapper.insert(userInfo);
    }

    /**
     * 更新用户信息
     *
     * @param pojo
     */
    @Override
    public void update(UserInfo pojo) {
        userInfoMapper.updateById(pojo);
    }

    /**
     * 通过用户id查询详情
     *
     * @param searchUserId
     * @return
     */
    @Override
    public UserInfo findById(Long searchUserId) {
        return userInfoMapper.selectById(searchUserId);
    }

    /**
     * 通过用户id集合，批量查询用户信息
     *
     * @param userIds
     * @return
     */
    @Override
    public List<UserInfo> findByBatchIds(List<Long> userIds) {
        return userInfoMapper.selectBatchIds(userIds);
    }

    /**
     * 通过用户id集合，批量查询用户信息
     *
     * @param userIds
     * @param condition
     * @return
     */
    @Override
    public Map<Long, UserInfo> findByBatchIds(List<Long> userIds, UserInfo condition) {
        LambdaQueryWrapper<UserInfo> lqw = new LambdaQueryWrapper<>();
        Map<Long, UserInfo> userInfoMap = new HashMap<>();
        // 1. 条件不为空
        if (null != condition) {
            // 2. 判断有年龄, 添加年龄，实现<=查询
            if (null != condition.getAge()) {
                lqw.le(UserInfo::getAge, condition.getAge());
            }
            // 3. 有性别，则添加为条件
            if (StringUtils.isNotEmpty(condition.getGender())) {
                lqw.eq(UserInfo::getGender, condition.getGender());
            }
        }
        lqw.in(UserInfo::getId, userIds);
        // 4. 查询，得到的是list 5
        List<UserInfo> userInfoList = userInfoMapper.selectList(lqw);
        // 非空
        if (CollectionUtil.isNotEmpty(userInfoList)) {
            // stream() 把集合打散，取出每个元素进行处理，处理完后再收集起来，使用map（指定key,指定value）来收集
            // key=用户的id, value=u代表集合中的每个元素 userInfo
            //userInfoMap = userInfoList.stream().collect(Collectors.toMap(UserInfo::getId, u -> u));
            for (UserInfo userInfo : userInfoList) {
                userInfoMap.put(userInfo.getId(), userInfo);
            }
        }
        // 5. list转成map
        return userInfoMap;
    }
}
